package org.geektimes.configuration.microprofile.config.source.servlet;

import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.spi.ConfigBuilder;
import org.geektimes.configuration.microprofile.config.DefaultConfigProviderResolver;
import org.geektimes.configuration.microprofile.config.source.ServletContextConfigSource;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/**
 * @author :   chuan
 * @date :   2021/03/23
 */
@WebListener
public class MyConfigurationListener implements ServletContextListener {

    /**
     *
     *  遇到 的 问题 ：
     *  如果 ServletContext 传到了 ServletContextListener 的 contextInitialized 方法，但该 ServletContextListener 即没
     *  有在 web.xml 或 web-fragment.xml 中声明也没有使用@WebListener 注解，则在 ServletContext 中定义的用于
     *  Servlet、Filter 和 Listener 的编程式配置的所有方法必须抛出 UnsupportedOperationException。
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {
//        ServletContext servletContext = sce.getServletContext();
//        ClassLoader classLoader = servletContext.getClassLoader();
//
//        ServletContextConfigSource servletContextConfigSource = new ServletContextConfigSource(servletContext);
//
//        DefaultConfigProviderResolver configProviderResolver = new DefaultConfigProviderResolver();
//        ConfigBuilder configBuilder = configProviderResolver.getBuilder();
//
//        configBuilder.forClassLoader(classLoader);
//
//        configBuilder.addDefaultSources();
//        configBuilder.addDiscoveredSources();
//        configBuilder.withSources(servletContextConfigSource);
//
//        configBuilder.addDiscoveredConverters();
//
//        Config config = configBuilder.build();
//
//        configProviderResolver.registerConfig(config, classLoader);
//
//        Config resolverConfig = configProviderResolver.getConfig(classLoader);
//
//        servletContext.setAttribute("applicationConfig", resolverConfig);
//
//        System.out.println(this.getClass().getSimpleName() + "--------Load Success-------->");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }
}
